﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucDekiemtraCauhoi : System.Web.UI.UserControl
{
    private List<CauhoiEntity> glbLstGrvDatasource = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //napDdlKhoahoc();
            napGrvCauhoi(true);
        }
    }
    /// <summary>
    /// Nạp GridView câu hỏi
    /// </summary>
    /// <author>minhbt</author>
    /// <create>25/05/2012</create>
    /// <param name="bLoadFromDB">Cho biết có cập nhật lại danh sách từ Database hay không</param>
    /// 
    public void napGrvCauhoi(bool bLoadFromDB)
    {
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = CauhoiBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        List<CauhoiEntity> lstCauhoiNgoaidekiemtra = null;
        List<CauhoiEntity> lstCauhoi_Theodekiemtra = null;
        if(Session["PK_iDekiemtraID"] != null)
        {
            Int64 PK_iDekiemtraID = Int64.Parse(Session["PK_iDekiemtraID"].ToString());
          //  ddlKhoahoc.Items.FindByValue(PK_iDekiemtraID.ToString()).Selected = true;
          //  KhoahocEntity oKhoahoc = KhoahocBRL.GetOne(PK_iDekiemtraID);
            List<Cauhoi_DekiemtraEntity> lstCauhoi_Dekiemtra = Cauhoi_DekiemtraBRL.GetByFK_iDekiemtraID(PK_iDekiemtraID);

            if (lstCauhoi_Dekiemtra.Count > 0)
            {
                lstCauhoi_Theodekiemtra = new List<CauhoiEntity>();
                lstCauhoiNgoaidekiemtra = new List<CauhoiEntity>();
                lstCauhoiNgoaidekiemtra.AddRange(glbLstGrvDatasource); //Copy element từ glbLstGrvDatasource vào lstBaihocNgoaikhoahoc
                for (int i = 0; i < lstCauhoi_Dekiemtra.Count; ++i)
                {
                    CauhoiEntity oCauhoiFound = glbLstGrvDatasource.Find
                    (
                        delegate(CauhoiEntity oCauhoiByID)
                        {
                            return oCauhoiByID.PK_iCauhoiID == lstCauhoi_Dekiemtra[i].FK_iCauhoiID;
                        }
                    );
                    lstCauhoi_Theodekiemtra.Add(oCauhoiFound);
                    lstCauhoiNgoaidekiemtra.Remove(oCauhoiFound);
                }
                lstCauhoi_Dekiemtra = null;
                grvCauhoi.DataSource = lstCauhoiNgoaidekiemtra;
                grvCauhoi.DataKeyNames = new string[] { "PK_iCauhoiID" };
                grvCauhoi.DataBind();
                grvCauhoitheode.DataSource = lstCauhoi_Theodekiemtra;
                grvCauhoitheode.DataKeyNames = new string[] { "PK_iCauhoiID" };
                grvCauhoitheode.DataBind();
            }
            else
            {
                grvCauhoi.DataSource = glbLstGrvDatasource;
                grvCauhoi.DataKeyNames = new string[] { "PK_iCauhoiID" };
                grvCauhoi.DataBind();
            }
        }
        else
        {
            grvCauhoi.DataSource = glbLstGrvDatasource;
            grvCauhoi.DataKeyNames = new string[] { "PK_iCauhoiID" };
            grvCauhoi.DataBind();
        }
        
    }

   
    /*
     * Hàm reset để xóa trắng form nhâp thông tin
     */
    public void resetForm()
    {
        txtTenbaihoc.Text = "";
        txtThongtinbaihoc.Text = "";
        divThongbao.InnerHtml = "";
    }
 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    /*
     * Hàm nạp dữ liệu cho form theo ID truyền vào
     * Tham số: truyền vào ID
     * Thực hiện: Lấy thông tin đối tượng theo ID và nạp vào form
     */
    public void napForm(Int64 iPK_ID)
    {
        CauhoiEntity oCauhoi = CauhoiBRL.GetOne(iPK_ID);
        if (oCauhoi != null)
        {
            //txtTenbaihoc.Text = oCauhoi.sNoidung;
            //txtThongtinbaihoc.Text = oCauhoi.sThongtinbaihoc;
            divThongbao.InnerHtml = "";
        }
    }
    protected void grvCauhoi_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvCauhoi.PageIndex = e.NewPageIndex;
        napGrvCauhoi(false);
    }
    /// <summary>
    /// Hàm kiểm tra RowCommand
    /// </summary>
    /// <param name="grv">Cho biết áp dụng cho GridView nào</param>
    /// <param name="e">GridViewCommandEventArgs của GridView grv</param>
    /// <author>minhbt</author>
    /// <create>26/05/2012</create>
    /// 
    public void onRowComand(GridView grv, GridViewCommandEventArgs e)
    {
        int iIndex;
        Int64 PK_iCauhoiID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grv.Rows[iIndex];
        PK_iCauhoiID = Int64.Parse(row.Cells[1].Text);
        if (e.CommandName == "Sua")
        {
            btnOK.CommandName = "Edit";
            btnOK.Text = "<span>Sửa<span>";
            btnOK.CommandArgument = PK_iCauhoiID.ToString();
            btnOK.CausesValidation = false;
            panEdit.Visible = true;
            napForm(PK_iCauhoiID);
        }
        else
            if (e.CommandName == "Xoa")
            {
                /*
                 * Thực hiện tác vụ xóa
                 * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                 * Nhưng không phải load lại từ database để hiển thị
                 */
                CauhoiBRL.Remove(PK_iCauhoiID); //Xóa trong database
                //Tìm đối tượng bài học theo ID trong danh sách lấy từ cache
                glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
                CauhoiEntity oCauhoiDelete = glbLstGrvDatasource.Find
                (
                    delegate(CauhoiEntity oCauhoiByID)
                    {
                        return oCauhoiByID.PK_iCauhoiID == PK_iCauhoiID;
                    }
                );
                if (oCauhoiDelete != null)
                {
                    glbLstGrvDatasource.Remove(oCauhoiDelete); //Xóa trong danh sách
                }
                napGrvCauhoi(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa câu hỏi " + oCauhoiDelete.PK_iCauhoiID + " thành công!</span></p>";
            }
        
    }
    protected void grvCauhoi_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        onRowComand(grvCauhoi, e);
    }
    protected void grvCauhoi_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<CauhoiEntity> lstShort = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = CauhoiEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvCauhoi(false);
    }
    protected void grvCauhoi_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //Label lblThongtinbaihoc = null;
        //if (e.Row.RowType == DataControlRowType.DataRow)
        //{
        //    lblThongtinbaihoc = (Label)e.Row.FindControl("lblThongtinbaihoc");
        //    if(lblThongtinbaihoc != null)
        //    {
        //        if(lblThongtinbaihoc.Text.Length > 50)
        //        {
        //            lblThongtinbaihoc.Text = lblThongtinbaihoc.Text.Substring(0, 50) + "...";
        //        }
        //    }
        //}
    }
    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<CauhoiEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(CauhoiEntity oCauhoi)
            {
                return oCauhoi.sNoidung.ToUpper().Contains
                (
                    strSearch.ToUpper()// ||
                    //oCauhoi.sThongtinbaihoc.ToUpper().Contains(strSearch.ToUpper()
                );
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(CauhoiEntity oCauhoiByID)
                {
                    return oCauhoiByID.PK_iCauhoiID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvCauhoi(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvCauhoi.DataSource = lstSearchResult;
            grvCauhoi.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        Session["bOnlyInCourse"] = false;
        napGrvCauhoi(false);
        divThongbao.InnerHtml = "";
    }
    /// <summary>
    /// Hàm thêm câu hỏi mới
    /// </summary>
    /// <author>minhbt</author>
    /// <create>26/05/2012</create>
    /// 
    public Int64 iThemCauhoi()
    {
        Int64 iRes = 0;

        try
        {
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            CauhoiEntity oCauhoi = new CauhoiEntity();
            //oCauhoi.sTenCauhoi = txtTenbaihoc.Text.Trim();
            //oCauhoi.sThongtinbaihoc = txtThongtinbaihoc.Text.Trim();
            //oCauhoi.dNgaytao = DateTime.Now;
            //oCauhoi.dNgaycapnhat = DateTime.Now;
            //oCauhoi.FK_iNguoicapnhat = iGetUserLogin();
            //oCauhoi.FK_iNguoitaoID = iGetUserLogin();
            //oCauhoi.FK_iAnhminhhoaID = 1;
            /* Thêm mới */
            iRes = CauhoiBRL.Add(oCauhoi);
            if (iRes > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm câu hỏi " + oCauhoi.PK_iCauhoiID + " thành công!</span></p>";
                /* Nạp lại dữ liệu */
                panEdit.Visible = false;
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }

        return iRes;
    }
    /// <summary>
    /// Hàm sửa thông tin câu hỏi
    /// </summary>
    /// <author>minhbt </author>
    /// <create>26/05/2012</create>
    /// 
    public bool bSuaBaihoc()
    {
        bool bRes = false;

       try
        {
        //    /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
        //    CauhoiEntity oCauhoi = new CauhoiEntity();
        //    oCauhoi.sTenbaihoc = txtTenbaihoc.Text.Trim();
        //    oCauhoi.sThongtinbaihoc = txtThongtinbaihoc.Text.Trim();
        //    oCauhoi.dNgaycapnhat = DateTime.Now;
        //    oCauhoi.FK_iNguoicapnhat = iGetUserLogin();
        //    oCauhoi.FK_iAnhminhhoaID = 1;
        //    Int64 iPK_ID = Int64.Parse(btnOK.CommandArgument);
        //    CauhoiEntity oCauhoiOld = CauhoiBRL.GetOne(iPK_ID);
        //    oCauhoi.PK_iCauhoiID = oCauhoiOld.PK_iCauhoiID;
        //    oCauhoi.FK_iNguoitaoID = oCauhoiOld.FK_iNguoitaoID;
        //    oCauhoi.dNgaytao = oCauhoiOld.dNgaytao;
        //    bRes = CauhoiBRL.Edit(oCauhoi); //Gọi tác vụ sửa
        //    btnOK.CausesValidation = true;
        //    /*  Hiển thị thông báo */
        //    if (bRes == true)
        //    {
        //        divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Sửa bài học " + oCauhoi.sTenbaihoc + " thành công!</span></p>";
        //    }
        //    /* Nạp lại dữ liệu */
        //    panEdit.Visible = false;
        //    napGrvCauhoi(true);
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }

        return bRes;
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        
        if (btnOK.CommandName == "Edit")
        {
            bSuaBaihoc();
        }
        else
            if(btnOK.CommandName == "Add")
            {
                //iThemBaihoc();
                napGrvCauhoi(true);
            }
        else
            if (btnOK.CommandName == "AddToList")
            {
                //Int64 PK_iDekiemtraID = 0;
                //Int64 PK_iCauhoiID = iThemBaihoc();
                //if (Session["PK_iDekiemtraID"] != null)
                //{
                //    PK_iDekiemtraID = Int64.Parse(Session["PK_iDekiemtraID"].ToString());
                //}
                //if (PK_iCauhoiID > 0 && PK_iDekiemtraID > 0)
                //{
                //    Cauhoi_DekiemtraEntity oKhoahocBaihoc = new Cauhoi_DekiemtraEntity();
                //    oKhoahocBaihoc.FK_iKhoahocID = PK_iDekiemtraID;
                //    oKhoahocBaihoc.FK_iBaihocID = PK_iCauhoiID;
                //    Khoahoc_CauhoiBRL.Add(oKhoahocBaihoc);
                //    napGrvCauhoi(true);
                //}
            }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        resetForm();
        btnOK.CommandName = "Add";
        panEdit.Visible = false;
    }
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "Add";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
    }
    /// <summary>
    /// Hàm xóa danh sách các item đã chọn
    /// </summary>
    /// <param name="grv">Cho biết xóa trên GridView nào</param>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    /// 
    public void deleteAll(GridView grv)
    {
        try
        {
            glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
            CauhoiEntity oCauhoiDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grv.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int64 iID = Convert.ToInt64(grv.DataKeys[row.RowIndex].Values["PK_iCauhoiID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    CauhoiBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng bài học theo ID trong danh sách */
                    oCauhoiDelete = glbLstGrvDatasource.Find
                    (
                        delegate(CauhoiEntity oCauhoiByID)
                        {
                            return oCauhoiByID.PK_iCauhoiID == iID;
                        }
                    );
                    glbLstGrvDatasource.Remove(oCauhoiDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napGrvCauhoi(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        deleteAll(grvCauhoi);
    }
    protected void btnOnlyInCourse_Click(object sender, EventArgs e)
    {
        Session["bOnlyInCourse"] = true;
        napGrvCauhoi(false);
    }
    protected void grvCauhoitheode_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvCauhoi.PageIndex = e.NewPageIndex;
        napGrvCauhoi(false);
    }
    protected void grvCauhoitheode_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        onRowComand(grvCauhoitheode, e);
    }
    protected void grvCauhoitheode_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<CauhoiEntity> lstShort = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = CauhoiEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvCauhoi(false);
    }
    protected void grvCauhoitheode_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //Label lblThongtinbaihoc = null;
        //if (e.Row.RowType == DataControlRowType.DataRow)
        //{
        //    lblThongtinbaihoc = (Label)e.Row.FindControl("lblThongtinbaihoc");
        //    if (lblThongtinbaihoc != null)
        //    {
        //        if (lblThongtinbaihoc.Text.Trim().Length > 50)
        //        {
        //            lblThongtinbaihoc.Text = lblThongtinbaihoc.Text.Substring(0, 50) + "...";
        //        }
        //    }
        //}
    }
   
    protected void lbtnAddToList_Click(object sender, EventArgs e)
    {
        Int64 PK_iDekiemtraID = 0;
        int iAddCount = 0;
        CheckBox chkCauhoi = null;
        try
        {
            glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
            if (Session["PK_iDekiemtraID"] != null)
            {
                PK_iDekiemtraID = Int64.Parse(Session["PK_iDekiemtraID"].ToString());
            }
            iAddCount = 0; //Đếm số lượng bản ghi thêm thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvCauhoi.Rows)
            {
                chkCauhoi = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iCauhoiID = Convert.ToInt64(grvCauhoi.DataKeys[row.RowIndex].Values["PK_iCauhoiID"]);
                if ((chkCauhoi != null) && (chkCauhoi.Checked == true))
                {
                    Cauhoi_DekiemtraEntity oDekiemtra_Cauhoi = new Cauhoi_DekiemtraEntity();
                    oDekiemtra_Cauhoi.FK_iCauhoiID = PK_iCauhoiID;
                    oDekiemtra_Cauhoi.FK_iDekiemtraID = PK_iDekiemtraID;
                 
                    Cauhoi_DekiemtraBRL.Add(oDekiemtra_Cauhoi);
                    ++iAddCount;
                }
            }
            napGrvCauhoi(false);
            if (iAddCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm vào danh sách " + iAddCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnRemoveFromList_Click(object sender, EventArgs e)
    {
        Int64 PK_iDekiemtraID = 0;
        int iAddCount = 0;
        CheckBox chkCauhoi = null;
        Cauhoi_DekiemtraEntity oDekiemtra_Cauhoi = null;
        List<Cauhoi_DekiemtraEntity> lstCauhoiDekiemtra = null;
        try
        {
            glbLstGrvDatasource = (List<CauhoiEntity>)Cache["cacheLstGrvDatasource"];
            if (Session["PK_iDekiemtraID"] != null)
            {
                PK_iDekiemtraID = Int64.Parse(Session["PK_iDekiemtraID"].ToString());
            }
            else
            {
                return;
            }
            iAddCount = 0; //Đếm số lượng bản ghi thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvCauhoitheode.Rows)
            {
                chkCauhoi = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iCauhoiID = Convert.ToInt64(grvCauhoitheode.DataKeys[row.RowIndex].Values["PK_iCauhoiID"]);
                if ((chkCauhoi != null) && (chkCauhoi.Checked == true))
                {
                    lstCauhoiDekiemtra = Cauhoi_DekiemtraBRL.GetByFK_iKhoahocIDAndFK_iBaihocID(PK_iDekiemtraID, PK_iCauhoiID);
                    if (lstCauhoiDekiemtra.Count > 0)
                    {
                        oDekiemtra_Cauhoi = lstCauhoiDekiemtra[0];
                        Cauhoi_DekiemtraBRL.Remove(oDekiemtra_Cauhoi.PK_iKhoahoc_BaihocID);
                        ++iAddCount;
                    }
                }
            }
            napGrvCauhoi(false);
            if (iAddCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa " + iAddCount + " bản ghi khỏi danh sách!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnAddNewAndAddToList_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "AddToList";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
    }
    protected void lbtnDeleteInList_Click(object sender, EventArgs e)
    {
        deleteAll(grvCauhoitheode);
    }
}